package com.admin.system.dao;

import com.admin.model.pojo.Menu;
import com.admin.model.pojo.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * (Role)表数据库访问层
 *
 * @author makejava
 * @since 2021-01-31 19:58:51
 */
public interface RoleDao extends BaseMapper<Role> {

    /**
     * 通过实体作为筛选条件查询
     *
     * @param role 实例对象
     * @return 对象列表
     */
    List<Role> queryAll(Role role);

    /**
     * 角色id查询菜单id列表
     * @param roleId
     * @return
     */
    @Select("SELECT menu_id FROM sys_role_menu WHERE role_id = #{roleId}")
    String[] queryMenuIdsByRoleId(Long roleId);

    /**
     * 删除角色授权菜单
     * @param roleId
     * @return
     */
    @Delete("delete from sys_role_menu where role_id=#{roleId}")
    int delAuthMenuByRoleId(Long roleId);

    /**
     * 角色id查询权限菜单
     * @param roleId
     * @return
     */
    List<Menu>queryMenuByRoleIdAndType(@Param("roleId") Long roleId, @Param("type") int type);

    /**
     * 角色id查询菜单
     * @param roleId
     * @return
     */
    List<Menu> queryMenuByRoleId(Long roleId);

    /**
     * 角色id查询权限菜单+不等于该type类型
     * @param roleIds
     * @param type
     * @return
     */
    List<Menu>queryMenuByRoleIdsAndTypeNot(@Param("roleIds") List<Long> roleIds, @Param("type") int type);

    /**
     * 查询角色顶层菜单
     * @param roleIds
     * @param type
     * @return
     */
    List<Menu> queryTopByRoleIdsAndTypeNot(List<Long> roleIds, int type);
    /**
     * 角色id查询权限菜单+不等于该type类型
     * @param roleIds
     * @param type
     * @return
     */
    List<Menu>queryMenuByRoleIdsAndType(@Param("roleIds") List<Long> roleIds, @Param("type") int type);

    /**
     * 授权角色菜单
     *
     * @param roleId
     * @param menuId
     * @return
     */
    @Insert("insert into sys_role_menu (role_id,menu_id)values(#{roleId},#{menuId})")
    int authRole(Long roleId, Long menuId);

}